/*
    Date:2022.03.22
    Author:胡鑫洋
    Target:主函数
*/
#include <reg52.h>                
#include "i2c.h"
#include "delay.h"
#include "display.h"
#include <uart.h>




#define AddWr 0x90   //写数据地址 
#define AddRd 0x91   //读数据地址

extern bit ack;
bit ReadADFlag;

unsigned char VoltData[5]; //存储电压的全局变量,用于串口通讯


unsigned char numback(unsigned char s);
unsigned char ReadADC(unsigned char Chl);
bit WriteDAC(unsigned char dat);
/*------------------------------------------------
              主程序
------------------------------------------------*/
main()
{
 unsigned char num=0,num0=0,num1=0,num2=0,num3=0,i;
 Init_Timer0();
 DelayMs(20);
	
 InitUART();

while (1)         //主循环
  {
 if(ReadADFlag)
  {
  ReadADFlag=0; 
//连续读5次，输入通道后多读几次，取最后一次值，以便读出稳定值
 for(i=0;i<5;i++)
    num0=ReadADC(0);
  num0=num0*5*10/256;// x10表示把实际值扩大10，如4.5 变成 45 方便做下一步处理 x5 表示基准电压5V 
  TempData[0]=dofly_DuanMa[num0/10]|0x80;  
  TempData[1]=dofly_DuanMa[num0%10];
	  
 for(i=0;i<5;i++)
   num1=ReadADC(1);
 num1=num1*5*10/256;   // x10表示把实际值扩大10，如4.5 变成 45 方便做下一步处理
 TempData[2]=dofly_DuanMa[num1/10]|0x80;    
 TempData[3]=dofly_DuanMa[num1%10];

 for(i=0;i<5;i++)
    num2=ReadADC(2);
 num2=num2*5*10/256;   // x10表示把实际值扩大10，如4.5 变成 45 方便做下一步处理
 TempData[4]=dofly_DuanMa[num2/10]|0x80;    
 TempData[5]=dofly_DuanMa[num2%10];

 for(i=0;i<5;i++)
     num=ReadADC(3);
 num3=num3*5*10/256;   // x10表示把实际值扩大10，如4.5 变成 45 方便做下一步处理
 TempData[6]=dofly_DuanMa[num3/10]|0x80;    
 TempData[7]=dofly_DuanMa[num3%10];
 //主循环中添加其他需要一直工作的程序
 
 VoltData[0]=num0;
 VoltData[1]=num1;
 VoltData[2]=num2;
 VoltData[3]=num3;
 VoltData[4]=0xff;

 
 SendStr1(VoltData);
	DelayMs(240);//延时循环发送
    DelayMs(240);
   }
 /*
   SendStr1(VoltData);
	DelayMs(240);//延时循环发送
    DelayMs(240);
 */
  }
}
/*------------------------------------------------
             读AD转值程序
输入参数 Chl 表示需要转换的通道，范围从0-3
返回值范围0-255
------------------------------------------------*/
unsigned char ReadADC(unsigned char Chl)
 {
  unsigned char Val;
   Start_I2c();               //启动总线
   SendByte(AddWr);             //发送器件地址
     if(ack==0)return(0);
   SendByte(Chl);            //发送器件子地址
     if(ack==0)return(0);
   Start_I2c();
   SendByte(AddRd);
      if(ack==0)return(0);
   Val=RcvByte();
   NoAck_I2c();                 //发送非应位
   Stop_I2c();                  //结束总线
  return(Val);
 }
/*------------------------------------------------
               写入DA转换数值
输入参数：dat 表示需要转换的DA数值，范围是0-255
------------------------------------------------*/
/*bit WriteDAC(unsigned char dat)
{
   Start_I2c();               //启动总线
   SendByte(AddWr);             //发送器件地址
     if(ack==0)return(0);
   SendByte(0x40);            //发送器件子地址
     if(ack==0)return(0);
   SendByte(dat);             //发送数据
     if(ack==0)return(0);
   Stop_I2c();  
}*/


 
